In st_focus_manager_stage_event() we get the current key-focus actor from
the stage, and then enter a loop where we iterate through parents until we
get to the stage. If the key-focus actor is not a descendent of the stage
for some reason, this loop will never exit and we've locked up.
We can easily prevent the endless loop by checking for NULL as the exit
condition instead of checking for the stage, so do that instead.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3220>
(cherry picked from commit
0df2168b18383452b48d09e0abc7b95be6540d7e)
if (!focused)
return FALSE;
- for (group = focused; group != stage; group = clutter_actor_get_parent (group))
+ for (group = focused; group != NULL; group = clutter_actor_get_parent (group))
{
if (g_hash_table_lookup (manager->groups, group))
{